package co.edu.usbcali.servicio.rest;

import java.util.Date;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.springframework.stereotype.Controller;

import co.edu.usbcali.correo.EmailController;
import co.edu.usbcali.modelo.Roles;
import co.edu.usbcali.modelo.Usuarios;
import co.edu.usbcali.modelo.restdto.UsuarioRestDTO;
import co.edu.usbcali.presentation.businessDelegate.IBusinessDelegatorView;
import co.edu.usbcali.utilities.ApplicationContextHolder;
 
@Path("usuario")
@Controller
public class UsuarioRest {
	
	@GET
	@Produces("application/json")
	@Path("/registro/{nombre}/{correo}/{contrasena}/{codRol}")
	public UsuarioRestDTO registro(@PathParam("nombre") String nombre, @PathParam("correo") String correo, 
			@PathParam("contrasena") String contrasena, @PathParam("codRol") String codRol){
		    
		UsuarioRestDTO usuariosRest=null;
		
		try {
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);
			
			Roles rol = null;
			
			if(codRol.equals("1")){
				
				rol=businessDelegatorView.getRoles(1L);
				
			}else{
				rol=businessDelegatorView.getRoles(2L);
			}
			nombre=nombre.replaceAll("_", " ");
			
			Usuarios entity = new Usuarios();
			entity.setNombre(nombre);
			entity.setClave(contrasena);
			entity.setEmail(correo);
			entity.setFechaCreacion(new Date());
			entity.setFechaModifcacion(new Date());
			entity.setUsuCrea("Registro");
			entity.setUsuModifica("Registro");
			entity.setEstadoRegistro("A");
			entity.setRoles(rol);
			
			businessDelegatorView.saveUsuarios(entity);
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setNombre(nombre);
			usuariosRest.setCodigoUsua(entity.getCodigoUsua());
			usuariosRest.setEmail(correo);
			usuariosRest.setRol(rol.getNombreRol());
			usuariosRest.setCodigoRol_Roles(rol.getCodigoRol());
			usuariosRest.setClave(contrasena);
			EmailController mail=new EmailController();
			
			if(codRol.equals("1")){
				String subject="Registro Exitoso en el sistema VAOI";
				String messageBody="Bienvenido ADMIN <br>  Usuario: " + correo +" <br> Password:" + contrasena;
				mail.performTask(correo, subject, messageBody, null);
			}else{
				String subject="Registro Exitoso en el sistema VAOI";
				String messageBody="Bienvenido USER <br>  Usuario: " + correo +" <br> Password:" + contrasena;
				mail.performTask(correo, subject, messageBody, null);
			}

			
		} catch (Exception e) {
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setError(e.getMessage());
		}
		
		return usuariosRest;
	}

	
	
	@GET
	@Produces("application/json")
	@Path("/modificarUsuario/{nombre}/{correo}/{contrasena}/{codUsuario}")
	public UsuarioRestDTO modificarUsuario(@PathParam("nombre") String nombre, @PathParam("correo") 
	       String correo, @PathParam("contrasena") String contrasena, @PathParam("codUsuario") Long codUsuario){
		    
		UsuarioRestDTO usuariosRest=null;
		try {
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);
			
			nombre=nombre.replaceAll("_", " ");

			Usuarios entity = businessDelegatorView.getUsuarios(codUsuario);		
			entity.setNombre(nombre);
			entity.setClave(contrasena);
			entity.setEmail(correo);
			entity.setFechaModifcacion(new Date());
			entity.setUsuModifica(nombre);
			entity.setEstadoRegistro("A");
			
			businessDelegatorView.updateUsuarios(entity);
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setNombre(nombre);
			usuariosRest.setCodigoUsua(entity.getCodigoUsua());
			usuariosRest.setEmail(correo);
			usuariosRest.setClave(contrasena);
			

		} catch (Exception e) {
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setError(e.getMessage());
		}
		
		return usuariosRest;
	}
	
	@GET
	@Produces("application/json")
	@Path("/consultarUsuario/{codUsuario}")
	public UsuarioRestDTO consultarUsuario(@PathParam("codUsuario") Long codUsuario){
		    
		UsuarioRestDTO usuariosRest=null;
		try {
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);

			Usuarios entity = businessDelegatorView.getUsuarios(codUsuario);
			
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setNombre(entity.getNombre());
			usuariosRest.setCodigoUsua(entity.getCodigoUsua());
			usuariosRest.setEmail(entity.getEmail());
			usuariosRest.setClave(entity.getClave());

		} catch (Exception e) {
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setError(e.getMessage());
		}
		
		return usuariosRest;
	}

}